package Tema3.Ejercicio5;

public class Guerra {

    private Nave[] navesTerricolas, navesMarcianos;
    private int numeroDeTerricolas, numeroDeMarcianos;

    public Guerra(int numeroDeTerricolas, int numeroDeMarcianos) {
        this.numeroDeTerricolas = numeroDeTerricolas;
        this.numeroDeMarcianos = numeroDeMarcianos;

        // Inicializo el array
        this.navesTerricolas = new Nave[1];
        this.navesMarcianos = new Nave[1];

        // Inicializo la posición 0 del array
        this.navesTerricolas[0] = new Nave("Terricolas", numeroDeTerricolas);
        this.navesMarcianos[0] = new Nave("Marcianos", numeroDeMarcianos);
    }

    public Guerra(int numeroDeTerricolas, int numeroDeMarcianos, int numNaveTerricolas, int numNaveMarcianos) {

        this.numeroDeTerricolas = numeroDeTerricolas;
        this.numeroDeMarcianos = numeroDeMarcianos;

        // Inicializo el array
        this.navesTerricolas = new Nave[numNaveTerricolas];
        this.navesMarcianos = new Nave[numNaveMarcianos];

        // Inicializo la posición "recorrerTerricolas" del array
        for (int recorrerTerricolas = 0; recorrerTerricolas < numNaveTerricolas; recorrerTerricolas++) {
            this.navesTerricolas[recorrerTerricolas] = new Nave("Terricolas", numeroDeTerricolas);
        }
        // Inicializo la posición "recorrerMarcianos" del array
        for (int recorrerMarcianos = 0; recorrerMarcianos < numNaveTerricolas; recorrerMarcianos++) {
            this.navesTerricolas[recorrerMarcianos] = new Nave("Terricolas", numeroDeTerricolas);
        }

    }

    public void empiezaGuerra() {
        boolean hanGanadoLosTerricolas = false;
        if (navesMarcianos.length == 1 && navesTerricolas.length == 1) { //Combate de 1 vs 1;
            hanGanadoLosTerricolas = combateDirecto(0, 0);
        } else { //Combate de N vs M;
            int naveTerricola = 0;
            int naveMarciano = 0;
            boolean resultadoEnfrentamiento = combateDirecto(naveTerricola, naveMarciano);
            if (resultadoEnfrentamiento == true) {
                naveMarciano++;
            } else {
                naveTerricola++;
            }
            while ((naveTerricola<navesTerricolas.length) && (naveMarciano<navesMarcianos.length)) {
                resultadoEnfrentamiento = combateDirecto(naveTerricola, naveMarciano);
                if (resultadoEnfrentamiento == true) {
                    naveMarciano++;
                } else {
                    naveTerricola++;
                }
            }
            if(naveTerricola==navesTerricolas.length){
                hanGanadoLosTerricolas = false;
            } else {
                hanGanadoLosTerricolas = true;
            }
        }

        if (hanGanadoLosTerricolas == true) {
            System.out.println("GANARON LOS TERRICOLAS!!!!!");
        } else {
            System.out.println("GANARON LOS MARCIANOS!!!!!");
        }
    }

    private boolean quedanVivosEnAmbasNaves(int naveTerricolas, int naveMarcianos) {
        return navesTerricolas[naveTerricolas].cuantosQuedan() > 0 && navesMarcianos[naveMarcianos].cuantosQuedan() > 0;
    }

    private boolean combateDirecto(int naveTerricolas, int naveMarcianos) {
        do {
            int tamanoMaxTripulaciones
                    = numeroDeTerricolas > 20 ? numeroDeTerricolas : numeroDeMarcianos;

            for (int i = 0; i < tamanoMaxTripulaciones && quedanVivosEnAmbasNaves(naveMarcianos, naveTerricolas); i++) {
                if (i < numeroDeTerricolas) {
                    navesMarcianos[naveMarcianos].recibeDisparo(navesTerricolas[naveTerricolas].generaDisparo(i));
                }

                if (i < numeroDeMarcianos) {
                    navesTerricolas[naveTerricolas].recibeDisparo(navesMarcianos[naveMarcianos].generaDisparo(i));
                }
            }
        } while (quedanVivosEnAmbasNaves(naveTerricolas, naveTerricolas) == true);

        if (navesTerricolas[naveTerricolas].cuantosQuedan() > 0) {
            //System.out.println("GANARON LOS TERRICOLAS!!!!!");
            return true;
        } else {
            return false;
        }
    }

    public static void main(String[] args) {
        Guerra guerra = new Guerra(30, 10);
        //guerra.empiezaGuerra();
        guerra = new Guerra(30, 10, 5, 10); //30 y 10 tripulantes - 5 y 10 naves
        guerra.empiezaGuerra();
    }
}
